﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace Baik.Interface.Framework
{
    public interface IInjector
    {
        TA Instantiate<TA>();
        object Instantiate(Type t);
        TA Instantiate<TA>(object[] parms);
        object Instantiate(Type t, object[] parms);

        IRegister Register<TA>();
        IRegister Register(Type typ);
        void Run(IRegistrationScript script);
    }
    public interface IRegister
    {
        void As<TC>();

        void As(Type typ);
        void AsSingletonOf<TC>();
        void AsSingletonOf(Type typ);
        void AsInstanceOf<TC>(TC instance);
    }
    public interface IRegistrationScript
    {
        void Register(IInjector injector);
    }

    public interface IQue<T>
    {
        void Push(T itm);
        void Push(IEnumerable<T> items);
        T Pop();
        T Peek();
        bool Empty { get; }
        void Clear();
    }
}
